#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 1;
vector<int> tree[N]; // 领接表
int d1[N], d2[N];    // 每个节点。。。。最长和次长路径

int n;
int ans = -0x3f3f3f3f;
// 深度搜索
void dfs(int u, int father, int deep) {
  d1[u] = 0;
  d2[u] = 0;
  int da = 0;
  int cida = 0;
  for (auto son : tree[u]) {
    dfs(son, u, deep + 1);
    if (d1[son] + 1 > da) {
      cida = da;
      da = d1[son] + 1;
    } else if (d1[son] + 1 > cida) {
      cida = d1[son] + 1;
    }
  }
  d1[u] = da;
  d2[u] = cida;
  ans = max(ans, d1[u] + d2[u]);
}

int main() {

  cin >> n;
  for (int i = 2; i <= n; i++) {
    int fa;
    cin >> fa;
    tree[fa].push_back(i);
  }
  dfs(1, 0, 0);
  cout << ans;
  return 0;
}